import mysql.connector
import pandas as pd
from docx import Document

# 数据库连接配置
db_config = {
    'host': 'localhost',
    'port': '3306',
    'user': 'root',
    'password': 'root',
    'database': 'db_boot_tutor'
}

# 连接到数据库
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()

# 获取所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()

# 为每个表生成 Excel 和 Word 文件
for table in tables:
    table_name = table[0]

    # 查询表结构信息
    cursor.execute(f"DESCRIBE {table_name}")
    columns = cursor.fetchall()

    # 将数据结构转换为 DataFrame
    data = []
    for index, column in enumerate(columns, start=1):
        row = {
            '序号': index,
            '列名': column[0],
            '数据类型': column[1],
            '长度': column[1].split('(')[-1].split(')')[0] if '(' in column[1] else '',
            '说明': '',  # 你可以手动填写说明
            '允许空': 'YES' if column[2] == '是' else '否'
        }
        data.append(row)

    df = pd.DataFrame(data)

    # 生成 Excel 文件
    excel_filename = f"{table_name}_structure.xlsx"
    df.to_excel(excel_filename, index=False, engine='openpyxl')
    print(f"Excel 文件已生成：{excel_filename}")

    # 生成 Word 文件
    doc = Document()
    doc.add_heading(f'{table_name} 数据库表结构', 0)

    # 添加表格
    table = doc.add_table(rows=1, cols=len(df.columns))

    # 设置表头
    hdr_cells = table.rows[0].cells
    for i, column_name in enumerate(df.columns):
        hdr_cells[i].text = column_name

    # 填充数据
    for index, row in df.iterrows():
        row_cells = table.add_row().cells
        for i, value in enumerate(row):
            row_cells[i].text = str(value)

    word_filename = f"{table_name}_structure.docx"
    doc.save(word_filename)
    print(f"Word 文件已生成：{word_filename}")

# 关闭数据库连接
cursor.close()
conn.close()
